﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Project_KhuyenMaiVang.Models;
using Project_KhuyenMaiVang.DataProvider;
using System.Data.SqlClient;
using System.Data;

namespace Project_KhuyenMaiVang.DAO
{
    public class DonDatHangDAO : MyDataProvider
    {
        // Lấy đơn hàng theo mã đơn đặt hàng
        // parameter    : mã đơn đặt hàng
        // return về DonDatHangDTO
        public DonDatHangDTO getOrder(int idOrder)
        {
            DonDatHangDTO result = new DonDatHangDTO();
            try
            {
                string strCommand = "SELECT* FROM DONDATHANG WHERE MaDonDatHang = " + idOrder.ToString();
                _Adapter = new SqlDataAdapter(strCommand, _Connection);
                DataSet dataset = new DataSet();
                _Adapter.Fill(dataset);
                DataTable dt = dataset.Tables[0];
                object ob = GetDataFromDataRow(dt, 0);
                result = (DonDatHangDTO)ob;
            }
            catch (Exception ex)
            {
                result = null;
            }

            return result;
        }

        // Lấy tất cả đơn đặt hàng
        // parameter    : void
        // return       : List<DonDatHangDTO>
        public List<DonDatHangDTO> getAllOrders()
        {
            List<DonDatHangDTO> result = new List<DonDatHangDTO>();
            try
            {
                string strCommand = "SELECT* FROM DONDATHANG";
                _Adapter = new SqlDataAdapter(strCommand, _Connection);
                DataSet dataset = new DataSet();
                _Adapter.Fill(dataset);
                DataTable dt = dataset.Tables[0];
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    object ob = GetDataFromDataRow(dt, i);
                    result.Add((DonDatHangDTO)ob);
                }
            }
            catch (Exception ex)
            {
                result = null;
            }

            return result;
        }

        protected override object GetDataFromDataRow(DataTable dt, int i)
        {
            DonDatHangDTO order = new DonDatHangDTO();
            order.MaDonDatHang = Int32.Parse(dt.Rows[i]["MaDonDatHang"].ToString());
            order.IDAccount = Int32.Parse(dt.Rows[i]["IDAccount"].ToString());
            order.MaTinKhuyenMai = Int32.Parse(dt.Rows[i]["MaTinKhuyenMai"].ToString());
            order.SoLuong = Int32.Parse(dt.Rows[i]["SoLuong"].ToString());
            order.MaHinhThucThanhToan = Int32.Parse(dt.Rows[i]["MaHinhThucThanhToan"].ToString());
            order.MaTinhTrangDonDatHang = Int32.Parse(dt.Rows[i]["MaTinhTrangDonDatHang"].ToString());

            return (object)order;
        }

        // Xóa đơn hàng
        // parameter    : mã đơn đặt hàng
        // return       : true nếu thành công, false nếu thất bại
        public bool deleteOrder(int idOrder)
        {
            bool result = true;
            try
            {
                string deleteCommand = "DELETE FROM DONDATHANG WHERE MaDonDatHang = " + idOrder.ToString();
                executeNonQuery(deleteCommand);
            }
            catch
            {
                result = false;
            }

            return result;
        }

        // Cập nhật tình trạng đơn hàn
        // parameter    : mã đơn đặt hàng, mã tình trạng
        // return       : true nếu thành công, false nếu thất bại
        public bool updateOrderState(int idOrder, int idState)
        {
            bool result = true;
            try
            {
                string strSql = "UPDATE DONDATHANG " +
                                        "SET MaTinhTrangDonDatHang = @MaTinhTrangDonDatHang" +
                                        " WHERE MaDonDatHang = @MaDonDatHang";

                _Command = new SqlCommand(strSql, _Connection);
                SqlParameter[] param = new SqlParameter[2];

                param[0] = new SqlParameter("@MaTinhTrangDonDatHang", SqlDbType.Int);
                param[1] = new SqlParameter("@MaDonDatHang", SqlDbType.Int);

                param[0].Value = idState;
                param[1].Value = idOrder;

                for (int i = 0; i < param.Length; i++)
                {
                    _Command.Parameters.Add(param[i]);
                }

                _Command.CommandType = CommandType.Text;
                _Command.ExecuteNonQuery();
            }
            catch
            {
                result = false;
            }

            return result;
        }

        // Thêm đơn đặt hàng mới
        // parameter    : DonDatHangDTO
        // return true nếu thành công, false nếu thất bại
        public bool insert(DonDatHangDTO order)
        {
            bool result = true;
            try
            {
                string strSql = "INSERT INTO DONDATHANG (IDAccount, MaTinKhuyenMai, SoLuong, MaHinhThucThanhToan, MaTinhTrangDonDatHang) VALUES (@IDAccount, @MaTinKhuyenMai, @SoLuong, @MaHinhThucThanhToan, @MaTinhTrangDonDatHang)";
                _Command = new SqlCommand(strSql, _Connection);
                SqlParameter[] param = new SqlParameter[5];

                param[0] = new SqlParameter("@IDAccount", SqlDbType.Int);
                param[1] = new SqlParameter("@MaTinKhuyenMai", SqlDbType.Int);
                param[2] = new SqlParameter("@SoLuong", SqlDbType.Int);
                param[3] = new SqlParameter("@MaHinhThucThanhToan", SqlDbType.Int);
                param[4] = new SqlParameter("@MaTinhTrangDonDatHang", SqlDbType.Int);

                param[0].Value = order.IDAccount;
                param[1].Value = order.MaTinKhuyenMai;
                param[2].Value = order.SoLuong;
                param[3].Value = order.MaHinhThucThanhToan;
                param[4].Value = order.MaTinhTrangDonDatHang;

                for (int i = 0; i < param.Length; i++)
                {
                    _Command.Parameters.Add(param[i]);
                }

                _Command.CommandType = CommandType.Text;
                _Command.ExecuteNonQuery();
            }
            catch
            {
                result = false;
            }

            return result;
        }

        public List<DonDatHangDTO> getAllOrders(int maTinKhuyenMai)
        {
            List<DonDatHangDTO> result = new List<DonDatHangDTO>();
            try
            {
                string strCommand = "SELECT * FROM DONDATHANG where MaTinKhuyenMai = " + maTinKhuyenMai.ToString();
                _Adapter = new SqlDataAdapter(strCommand, _Connection);
                DataSet dataset = new DataSet();
                _Adapter.Fill(dataset);
                DataTable dt = dataset.Tables[0];
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    object ob = GetDataFromDataRow(dt, i);
                    result.Add((DonDatHangDTO)ob);
                }
            }
            catch (Exception ex)
            {
                result = null;
            }

            return result;
        }

        public List<DonDatHangDTO> getAllOrdersBoughtBy(int idAccount)
        {
            List<DonDatHangDTO> result = new List<DonDatHangDTO>();
            try
            {
                string strCommand = "SELECT * FROM DONDATHANG where IDAccount = " + idAccount.ToString();
                _Adapter = new SqlDataAdapter(strCommand, _Connection);
                DataSet dataset = new DataSet();
                _Adapter.Fill(dataset);
                DataTable dt = dataset.Tables[0];
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    object ob = GetDataFromDataRow(dt, i);
                    result.Add((DonDatHangDTO)ob);
                }
            }
            catch (Exception ex)
            {
                result = null;
            }

            return result;
        }
    }
}